Service locator
DI(Dependency Injection)に関するメモ - Shin x Blog
オブジェクトコンテナを依存として注入し、利用時に必要な依存オブジェクトをこのコンテナから取り出すというパターンである。
DIとの違い
サービスロケータは、DI を使わずに依存オブジェクトを内部で生成するパターンの発展系で、一方、DI コンテナは、外部から依存オブジェクトを与えるので、制御の方向が逆とも言える。
サービスロケータでも、DI コンテナと同様に、実装の差し替えや依存オブジェクトの生成やライフサイクルの管理といったメリットを享受できる。
ただ、DI パターンのメリットである、依存を明確にする、最小限にするという効果は薄れる。
Service locatorは、メソッドの依存しているオブジェクトをメソッド内部で生成するので、DIに比べて何に依存しているかわかりづらいkadoyau.icon
LaravelだとService containerがこのパターン
https://twitter.com/t_wada/status/1278836435047440384 by 和田卓人
注入の方法はコンストラクタインジェクション1択がおすすめ
Constructor injection
Inversion of Control Containers and the Dependency Injection pattern: Service Locator v.s. Dependency Injection
Martin Fowlerによる解説
コードで理解したい
Service LocatorとDependency InjectionパターンとDI Container - nuits.jp blog